package cn.wolfcode.web;

import cn.wolfcode.commno.JsonResult;
import cn.wolfcode.demo.Employee;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;
import java.util.List;

//@Controller
public class EmployeeController {

    //1.查询所有员工的接口
/*    @RequestMapping("employees/list")
    @ResponseBody
    public List<Employee> list(){
        return Arrays.asList(new Employee(1,"zhangsan",18),new Employee(1,"lisi",28));
    }*/
    /**
     *   查询所有员工的接口
     * 1 请求资源: employees
     * 2 请求方法: get
     * 3 请求参数: 没有
     * 4 响应数据: Json ,员工列表
     */
    @RequestMapping(value = "employees",method = RequestMethod.GET)
    @ResponseBody
    public List<Employee>list(){
        return Arrays.asList(new Employee(1,"zhangsan",18),new Employee(1,"lisi",28));
    }

    /**
     * 二:  员工新增接口
     * 1 请求路径: employees
     * 2 请求方法: post
     * 3 请求参数: name=lisi age=18
     * 4 响应数据: 返回创建好的对象(会有id)
     */
    @RequestMapping(value = "employees",method =RequestMethod.POST)
    @ResponseBody
    public Employee add(Employee employee){
        employee.setId(100);
        return employee;
    }

    /**
     * 三:  员工删除 :根据id删除:
     * 1 请求资源: employees
     * 2 请求方法: delete
     * 3 请求参数: id
     * 4 响应结果: 删除是否成功的操作,错误的具体信息
     *   统一的响应结果
     *      1 操作是否成功 通过一个状态来设置 code:200 代表成功 code:400 参数错误
     *      2.如果是错误,需要有错误的信息 字符串的msg来标识
     *      3.如果是正常:需要正常的数据,比如做员工列表处理 数据使用Object
     */
    @RequestMapping(value = "employees",method =RequestMethod.DELETE)
    @ResponseBody
    public JsonResult delete(Long id){
        //map => java对象相互转换
        System.out.println("删除操作:id="+id);
        if (id%2==0) {
            return JsonResult.success();
        }else {
            return JsonResult.error("今天运气不行");
        }
    }

    /**
     * 修改操作
     * 1 请求的资源: employees
     * 2 请求方法: put
     * 3 请求参数: id:100, name:jack age 20
     * 4 返回数据:
     *      json数据
     *      修改之后的一个员工对象
     */
    @RequestMapping(value = "employees",method =RequestMethod.PUT)
    @ResponseBody
    public JsonResult update(Employee employee){
        employee.setName(employee.getName()+"update");
        return JsonResult.success(employee);
    }

    /**
     * 根据id 查询员工信息
     * 1 请求的资源: employees
     * 2 请求方法: get
     * 3 请求参数: id
     * 4 返回数据:
     *      json格式的员工对象
     *      问题分析 :存在同一个映射路径有两个不同的处理方法
     *      解决:
     *      方案一:修改其中一个的映射路径
     *      方案二:使用参数路径: 把参数作为路径的组成部分 使用{变量名字}
     *          访问: employees/100
     *          路径参数: id=100
     *          方法的参数 : Integer id
     *
     */
    @RequestMapping(value = "employees/{sid}",method =RequestMethod.GET)
    @ResponseBody
    public JsonResult get(@PathVariable("sid") Integer id){
        Employee employee = new Employee(id, "test", 48);
        return JsonResult.success(employee);
    }
}
